
var ES = {
	jsonEval:function(json){
		try{
			return eval('('+json+')');
		}catch(e){
			return {};
		}
	},
	init : function(){
	
	},
	/**
	 * 清空表单数据
	 * @param {} formId
	 * @param {} exceptIds
	 */
	resetFrom : function(formId,exceptIds){
		var ids = '';
		if(isNotEmpty(exceptIds)){
			var splitStr = '';
			for(var i=0;i<exceptIds.length;i++){
				splitStr = ids.length>0?',':'';
				ids += splitStr + '#'+exceptIds[i];
			}
		}
		$('#'+ formId+' input').not(':button,:submit,:reset,:checkbox,:radio').not(ids).val('');
		$('#'+ formId+' input').filter(':checkbox,:radio').removeAttr('checked').removeAttr('selected');
		$('#'+ formId+' textarea').not(ids).val('');
		$('#'+ formId+' select').not(ids).val('');
	},
	/**
	 * 获取制定表单的所有input元素，拼装成AJAX请求的参数
	 * @param {} p
	 * @return data
	 */
	formParams : function(p){
		if (p == undefined) {
			return;
		}
		var data = new Array;
		$(p).find(":input").each(function(i, n) {
			if (($(n).attr('type') == "checkbox" || $(n).attr('type') == "radio")
					&& $(n).attr('checked') == true) {
				putParam(n,data);
			} else if ($(n).attr('type') == "text"
					|| $(n).attr('type') == "password"
					|| $(n).attr('type') == "hidden"
					|| $(n).attr('type') == "textarea") {
				putParam(n,data);
			}
		});
		$(p).find("select").each(function(i, n) {
			if ($.trim($(n).attr('value')) != '') {
				putParam(n,data);
			} else {
				if($(n).attr("name")!=''){
					data.push({
						name : $(n).attr("name"),
						value : ''
					});
				}
			}
		});
		return data;
	},
	
	formDatas : function(p,datas){
	 	if (p == undefined) {
			return;
		}
		var form = $(p);
		if(form.size()==0 || typeof(datas) == 'undefined'){
			return ;
		}
		$.each(datas,function(i,n){
				$("[name='"+i+"']",form).not(':button,:submit,:reset,:checkbox,:radio').val(n);
				//ele[0].checked = data[p] ? true : false;
				//$("[name='"+i+"']",form).is(':checkbox,:radio').val(n);
			
		});
		
	},
	statusCode : {
		ok : 200,
		error : 300,
		timeout : 301
	},
	//Session超时后的登陆转向
	loadLogin: function(){
		window.location = '';
	}
};

//将表单数据放到数组中，本方法配合formParams方法使用
function putParam(obj,dataList){
	if($(obj).attr("name")!='' && $(obj).attr("name")!='undefined'){
		dataList.push({
			name : $(obj).attr("name"),
			value : $(obj).attr("value")
		});
	}
};


(function($){
	//防止重复提交
	//增加了，index,mode,
	//index : 每个请求的索引，默认为0，任何值，
	//mode ：请求模式，有两个值，“abort”,“block”
    //      abort : 将之前的请求abort掉，
    //      block : 将之后的请求abort掉。
	var $ajax = $.ajax;
	$ajax._reuqestsCache = {};
	//全局的ajax访问，处理ajax清求时sesion超时  
	//设置全局 AJAX 默认选项。
	$.ajaxSetup({
		mode: "block",
        index: 0,
        cache: false,
	    contentType:"application/x-www-form-urlencoded;charset=utf-8",
	    beforeSend: function(xhr, s){
	    	if (s.mode){
	    		if (s.mode === "abort" && s.index){
	    			if ($ajax._reuqestsCache[s.index]){
	    				$ajax._reuqestsCache[s.index].abort();
	    			}
	    		}
	    		$ajax._reuqestsCache[s.index] = xhr;
	    	}
	    },
	    complete:function(XMLHttpRequest,textStatus){  
	        //通过XMLHttpRequest取得响应头，sessionstatus，  
	        var sessionstatus=XMLHttpRequest.getResponseHeader("sessionstatus");   
	        if(sessionstatus=="timeout"){  
	        //如果超时就处理 ，指定要跳转的页面  
	            top.window.location.replace($webroot +"login.do");  
	        }  
	    }  
	});
	
	//校验Ajax请求同时系统登录是否已超时
	$.checkAjaxTimeOut = function(json){
		//console.log(json);
		var tempJson;
		if($.isPlainObject(json)){
			tempJson = json;
		}else{
			tempJson = ES.jsonEval(json);
		}
		//console.log(tempJson);
		//登录超时后的转向处理
		/*if(tempJson.statusCode && tempJson.statusCode == ES.statusCode.timeout){
			ES.loadLogin();
		}*/
	};
	
	//通用Ajax调用入口
	$.esAjax = function(opts){
		if (opts.mode === "block" && opts.index) {
            if ($ajax._reuqestsCache[opts.index]) {
                return false;
            }
            $ajax._reuqestsCache[opts.index] = true;
        }
		opts = $.extend({
			async:true, //同步请求false  异步请求true
			type:"POST",
			dataType:"json",
			cache:false //缓存 true, 不缓存false
		},opts);
	 	
		$.ajax({
			url:opts.url,
			data:opts.data,
			async:opts.async,
			type:opts.type,
			dataType:opts.dataType,
			cache:opts.cache,
			beforeSend:opts.beforeSend,
			complete:opts.complete,
			success:function(data,textStatus){
				//检查系统登陆是否超时
				$.checkAjaxTimeOut(data);
				//读取文本内容模式
				if(opts.dataType=='text'){
					opts.success(data,textStatus);
					return;
				}
				opts.success(data,textStatus);
			},
			error:function(XMLHttpRequest, textStatus, errorThrown){
				if (opts.error) {
					opts.error();
				}else{
					 var msg = XMLHttpRequest.responseText;
					if(msg){
                    	msg = eval('('+msg+')');
                    	$.ligerDialog.error(msg.message,'系统提示');
                    }
					//errors = eval('('+errors+')');
					//console.log(errors);
                   // $.ligerDialog.error(errors.message,'系统提示');
				}
			}
		});
	};
	$(document).ajaxComplete(function(a,b,c){
        if (c.index) $ajax._reuqestsCache[c.index] = null;    
    })
	 
})(jQuery);